home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_13_1986_Transactor_Publishing.d64 / brk key 64.pal (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  9KB  |  371 lines

  1. 100 ;restore wedge -- break-time cmds.
  2. 110 ;by frank e. digioia
  3. 120 ;11/19/85
  4. 130 ;
  5. 140 * = $c500
  6. 150 ;
  7. 160 chrout = $ffd2   ;print char in .a
  8. 170 getin  = $ffe4   ;check keyboard
  9. 180 cold   = $fce2  ;cold system reset
  10. 190 ;
  11. 200 lda #<msg       ;point to mesg
  12. 210 ldy #>msg
  13. 220 jsr $ab1e       ;print mesg
  14. 230 ;
  15. 240 brkint lda #<rwdg ;setup nmi wedge
  16. 250 sta $0318        ;nmi vector
  17. 260 lda #>rwdg
  18. 270 sta $0319
  19. 280 rts
  20. 290 msg .byte 'break key 64 installed'
  21. 300 .byte $00
  22. 310 ;
  23. 320 rwdg pha         ;save regs
  24. 330 txa
  25. 340 pha
  26. 350 tya
  27. 360 pha
  28. 370 ;
  29. 380 lda #<brk2     ;disable recursion
  30. 390 ldx #>brk2
  31. 400 sta $0318
  32. 410 stx $0319
  33. 420 ;
  34. 430 jsr stop        ;scan stop key
  35. 440 bne *+5         ;not pressed
  36. 450 jmp newrsr      ;run/stop-restore
  37. 460 cli             ;allow keyboard
  38. 470 ;
  39. 480 wrloop jsr waitlp ;check keyboard
  40. 490 cmp #$0d        ;"carriage return?
  41. 500 beq [142]
  42. 510 cmp #"/"        ;"command coming?
  43. 520 bne wrloop      ;no/keep waiting
  44. 530 jsr chkcmd      ;check command
  45. 540 jmp wrloop      ;wait for more
  46. 550 ;
  47. 560 return jsr brkint ;restore wedge
  48. 570 jmp $febc       ;restore regs/rti
  49. 580 ;
  50. 590 waitlp jsr getin ;check keyboard
  51. 600 beq waitlp      ;"key pressed?
  52. 610 rts
  53. 620 ;
  54. 630 chk[157] jsr [146]lp  ;[161] cmmd byte
  55. 640 cmp #"h"        ;"hardcopy?
  56. 650 beq hrdcpy
  57. 660 cmp #"p"        ;"printer?
  58. 670 beq jmptab
  59. 680 cmp #"c"        ;"colors?
  60. 690 beq jmptab+3
  61. 700 cmp #"*"        ;"reset?
  62. 710 beq jmptab[170]6
  63. 720 cmp #"s"        ;"restore screen?
  64. 730 beq jmptab+9
  65. 740 cmp #"d"        ;"defaults?
  66. 750 beq jmptab[170]12
  67. 760 rts             ;[203] [164] [146] loop
  68. 770 ;
  69. 780 jmptab [178] [172]         ;jump table
  70. 790 jmp prnter
  71. 800 jmp col[176]s
  72. 820 jmp rscrn
  73. 830 jmp [150]alt
  74. 840 ;
  75. 850 [162]rsr [178] [172]   ;[162] [144][171][140]
  76. 860 jsr $fd15   ;initialize vec[164]rs
  77. 870 jsr $fda3   ;init sid[173]vic regs
  78. 880 jsr $e518   ;reset screen
  79. 890 jsr set[150]  ;set [150]ault col[176]s
  80. 900 jsr brk[181]  ;initialize wedge
  81. 910 jmp ($a002) ;basic warm start
  82. 920 ;
  83. 930 ;hrdcpy [171][171] dumps the text screen
  84. 940 ;[164] the [153]er. use [164] [148]
  85. 950 ;lo[171]res graphics, [168]es, etc.
  86. 960 ;
  87. 970 [159]   [178] $ffc0   ;[159] a file
  88. 980 [160]  [178] $ffc3   ;[160] a file
  89. 990 [156]ch  [178] $ffcc   ;set s[192]dard i[173]o
  90. 1000 chkout [178] $ffc9  ;set output device
  91. 1010 setlfs [178] $ffba   ;set file parms
  92. 1020 setnam [178] $ffbd   ;set [165] parms
  93. 1030 ;
  94. 1040 hrdcpy [178] [172] ;dump screen [164] [153]er
  95. 1050 lda #$92    ;n[176]mal mode flag
  96. 1060 sta revflg  ;set reverse flag
  97. 1070 lda #$7b    ;file #123
  98. 1080 jsr l[159]   ;[159] [153]er file
  99. 1090 ldx #$00
  100. 1100 stx $fb     ;s[164]re screen adr
  101. 1110 lda #$04
  102. 1120 sta $fc     ;as a po[181]er
  103. 1130 ;
  104. 1140 rwloop [178] [172]   ;loop over rows
  105. 1150 ldy #$00    ;reset column count
  106. 1160 ;
  107. 1170 chloop [178] [172]   ;loop over columns
  108. 1180 lda ($fb),y ;[161] chr from screen
  109. 1190 jsr chkmde  ;"normal or reverse?
  110. 1200 jsr decode  ;screen code to ascii
  111. 1210 jsr chrout  ;print the char.
  112. 1220 jsr stop    ;scan stop key
  113. 1230 beq hend    ;yes/finish up
  114. 1240 iny
  115. 1250 cpy #$28    ;"40th column yet?
  116. 1260 bcc chloop
  117. 1270 ;
  118. 1280 eopl [178] [172]    ;[128] of physical line
  119. 1290 lda #$0d   ;carriage [142]
  120. 1300 jsr chrout ;output it
  121. 1310 lda revflg ;[161] last mode [197]ue
  122. 1320 jsr chrout ;set the mode
  123. 1330 lda $fb    ;update screen po[181]er
  124. 1340 clc
  125. 1350 adc #$28   ;[164] [130] row
  126. 1360 sta $fb
  127. 1370 bcc [172][170]4    ;"need to incr hi byte?
  128. 1380 inc $fc
  129. 1390 inx        ;incr row counter
  130. 1400 cpx #$19   ;"25th row yet?
  131. 1410 bcc rwloop
  132. 1420 ;
  133. 1430 h[128] [178] [172]    ;finished!
  134. 1440 jsr [156]ch  ;[140] n[176]mal i[173]o
  135. 1450 lda #$7b
  136. 1460 jmp l[160] ;[160] [153]er
  137. 1470 ;
  138. 1480 revflg .byte $92
  139. 1490 ;
  140. 1500 ;decode [171][171] this routine c[145]verts
  141. 1510 ;a character from its screen
  142. 1520 ;code representati[145] [164] [198]ii.
  143. 1530 ;this is copied directly from
  144. 1540 ;the kernal rom at $e63e (curs[176]
  145. 1550 ;stuff [143]oved).
  146. 1560 ;
  147. 1570 decode [178] [172]  ;screen code [164] [198]ii
  148. 1580 sta $d7    ;s[164]re code
  149. 1590 [175] #$3f   ;mask out [164]p 2 bits
  150. 1600 asl $d7    ;mult code by two
  151. 1610 bit $d7    ;c[145]diti[145] flags
  152. 1620 bpl [172][170]4    ;"bit 7 clear?
  153. 1630 ora #$80   ;no - set bit 7 in .a
  154. 1640 bvs *+4    ;"bit 6 set?
  155. 1650 [176]a #$40   ;no [171] set bit 6
  156. 1660 rts        ;[198]ii code now in .a
  157. 1670 ;
  158. 1680 ;chkmde [171][171] checks [145] n[176]mal [176]
  159. 1690 ;reverse & s[128]s code [164] [153]er
  160. 1700 ;
  161. 1710 chkmde pha  ;[148] screen code
  162. 1720 lda revflg ;"what mode current?
  163. 1730 bmi nermal ;normal mode/skip
  164. 1740 pla        ;retrieve screen code
  165. 1750 bmi chkx   ;reverse/no sweat
  166. 1760 pha        ;save code again
  167. 1770 lda #$92   ;normal/kill reverse
  168. 1780 hc1 sta revflg ;toggle flag
  169. 1790 jsr chrout ;print the code
  170. 1800 pla        ;restore screen code
  171. 1810 chkx rts
  172. 1820 ;
  173. 1830 nermal pla  ;get screen code
  174. 1840 bpl chkx   ;normal/no sweat
  175. 1850 pha        ;save code again
  176. 1860 lda #$12   ;rev/switch mode
  177. 1870 bne hc1     ;finish up
  178. 1880 ;
  179. 1890 ;/c command (colors)
  180. 1900 ;
  181. 1910 colors lda #$03 ;code for 'c'
  182. 1920 jsr output  ;print command name
  183. 1930 zloop jsr waitlp  ;wait for key
  184. 1940 cmp #$0d    ;"return?
  185. 1950 bne [172][170]3     ;no[173]keep [203]ing
  186. 1960 rts
  187. 1970 ;
  188. 1980 cmp #"t"    ;"text?
  189. 1990 bne *+11    ;no/check on edge
  190. 2000 inc $0286   ;inc text color
  191. 2010 jsr chgtxt  ;change text color
  192. 2020 jmp zloop
  193. 2030 ;
  194. 2040 cmp #"e"    ;"edge (border)?
  195. 2050 bne [172][170]8     ;no[173]check [145] ground
  196. 2060 inc $d020   ;inc b[176]der col[176]
  197. 2070 jmp zloop
  198. 2080 ;
  199. 2090 cmp #"g"    ;"(back)ground?
  200. 2100 bne zloop   ;no/must be typo
  201. 2110 inc $d021   ;inc bckgrnd color
  202. 2120 jmp zloop
  203. 2130 ;
  204. 2140 ;/d command (set defaults)
  205. 2150 ;
  206. 2160 defalt = *
  207. 2170 lda #$04   ;code for 'd'
  208. 2180 jsr output ;print it
  209. 2190 lda $0286  ;get text color
  210. 2200 sta d1     ;save it
  211. 2210 lda $d020  ;get edge color
  212. 2220 sta d2     ;save it
  213. 2230 lda $d021  ;get ground color
  214. 2240 sta d3     ;save it
  215. 2250 rts        ;that's all folks
  216. 2260 ;
  217. 2270 d1 .byte $01
  218. 2280 d2 .byte $00
  219. 2290 d3 .byte $0a
  220. 2300 pflag .byte $7a
  221. 2310 ;
  222. 2320 ;output subroutine
  223. 2330 ;
  224. 2340 output = *       ;echo command
  225. 2350 sta $0427       ;corner of screen
  226. 2360 lda #$2f        ;slash code
  227. 2370 sta $0426       ;corner of screen
  228. 2380 lda #$20        ;space code
  229. 2390 sta $0425       ;corner of screen
  230. 2400 oxit rts         ;all done!
  231. 2410 ;
  232. 2420 ;/s command (output to screen)
  233. 2430 ;
  234. 2440 rscrn = *
  235. 2450 lda #$13       ;code for 's'
  236. 2460 jsr output     ;echo command
  237. 2470 lda pflag      ;"printer online?
  238. 2480 bpl oxit       ;no[173]d[145]'t bother
  239. 2490 lda #$7a       ;file #122
  240. 2500 sta pflag      ;set flag[173]offline
  241. 2510 jmp l[160]     ;[160] it up
  242. 2520 ;
  243. 2530 ;[173]p comm[175] (output [164] [153]er)
  244. 2540 ;
  245. 2550 prnter [178] [172]
  246. 2560 lda #$10      ;code [129] 'p'
  247. 2570 jsr output    ;echo comm[175]
  248. 2580 lda pflag     ;"printer online?
  249. 2590 bmi oxit      ;yes/don't bother
  250. 2600 lda #$ff      ;set printer online
  251. 2610 sta pflag     ;set flag
  252. 2620 lda #$7a      ;file #122
  253. 2630 jmp lopen
  254. 2640 ;
  255. 2650 ;text color subroutines
  256. 2660 ;
  257. 2670 colrst = $d800 ;start color mem
  258. 2680 colrnd = $dbe8 ;end color mem + 1
  259. 2690 ;
  260. 2700 chgtxt lda #<colrst ;set up adr
  261. 2710 sta $fb       ;pointer for start
  262. 2720 lda #>colrst  ;and end of color
  263. 2730 sta $fc       ;memory for fill.
  264. 2740 lda #<colrnd
  265. 2750 sta $fd
  266. 2760 lda #>colrnd
  267. 2770 sta $fe
  268. 2780 ;
  269. 2790 ldy #$00      ;.y is always zero
  270. 2800 ;
  271. 2810 cfloop lda $0286 ;get text color
  272. 2820 sta ($fb),y  ;fill color memory
  273. 2830 jsr incrmt   ;increment $fb/$fc
  274. 2840 jsr chek     ;compare start/end
  275. 2850 bcc cfloop   ;"end reached yet?
  276. 2860 ;
  277. 2870 incrmt clc    ;16 bit inc[143]ent
  278. 2880 lda #$01     ;inc[143]ent of 1
  279. 2890 adc $fb      ;inc[143]ent lo byte
  280. 2900 sta $fb      ;update it
  281. 2910 bcc [172][170]4      ;"increment hi byte?
  282. 2920 inc $fc
  283. 2930 rts
  284. 2940 ;
  285. 2950 chek lda $fc  ;compare 16 bit #'s
  286. 2960 cmp $fe      ;compare hi bytes
  287. 2970 bne *+6      ;'nuff said/return
  288. 2980 lda $fb      ;hi bytes equal so
  289. 2990 cmp $fd      ;low bytes get to
  290. 3000 rts          ;make the decision
  291. 3010 ;
  292. 3020 setdef lda d1 ;default text col
  293. 3030 sta $0286   ;set text color
  294. 3040 jsr chgtxt  ;fill color mem
  295. 3050 lda d2      ;default edge color
  296. 3060 sta $d020   ;set border color
  297. 3070 lda d3      ;default ground color
  298. 3080 sta $d021   ;set background col
  299. 3090 rts
  300. 3100 ;
  301. 3110 brk2 = *       ;user break 2
  302. 3120 pha           ;save regs
  303. 3130 txa
  304. 3140 pha
  305. 3150 tya
  306. 3160 pha
  307. 3170 ;
  308. 3180 jsr stop   ;scan stop key
  309. 3190 bne *+5    ;not pressed/continue
  310. 3200 jmp newrsr ;pressed/warm reset
  311. 3210 jmp $febc  ;restore regs & rti
  312. 3220 ;
  313. 3230 stop sta areg  ;save .a in memory
  314. 3240 stx xreg      ;save .x in memory
  315. 3250 jsr $f6bc     ;set stop flag
  316. 3260 jsr $ffe1     ;read stop flag
  317. 3270 php           ;save status word
  318. 3280 ldx xreg      ;get .x back
  319. 3290 lda areg      ;get .a back
  320. 3300 plp           ;get status word
  321. 3310 rts
  322. 3320 ;
  323. 3330 areg .byte $00
  324. 3340 xreg .byte $00
  325. 3350 ;
  326. 3360 ;lopen -- this routine opens a
  327. 3370 ;file to the printer (file no.
  328. 3380 ;is in .a on entry).  the
  329. 3390 ;printer is opened to whichever
  330. 3400 ;mode the screen is in.  i.e. if
  331. 3410 ;the screen is in the uppercase/
  332. 3420 ;lowercase mode, the printer
  333. 3430 ;will be also. the same applies to
  334. 3440 ;uppercase/graphics mode.
  335. 3450 ;
  336. 3460 lopen = *   ;open a printer file
  337. 3470 sta lfn
  338. 3480 lda $d018  ;which char setprint
  339. 3490 cmp #21    ;uppercase/graphics
  340. 3500 beq ug
  341. 3510 ldy #$07   ;sa for printer (u/l)
  342. 3520 .byte $2c  ;skip next instr
  343. 3530 ug ldy #$00 ;sa for upper/graphic
  344. 3540 lda lfn
  345. 3550 ldx #4     ;# for serial printer
  346. 3560 jsr setlfs
  347. 3570 lda #$00
  348. 3580 jsr setnam
  349. 3590 jsr open    ;system open routine
  350. 3600 ldx lfn     ;get file number
  351. 3610 jmp chkout  ;open output channel
  352. 3620 ;
  353. 3630 ;
  354. 3640 ;lclose - routine to close a
  355. 3650 ;file to the printer.  filenum
  356. 3660 ;in .a upon entry.
  357. 3670 ;
  358. 3680 lclose = *  ;close a printer file
  359. 3690 pha        ;save file number
  360. 3700 tax        ;get file number in .x
  361. 3710 jsr chkout ;open the channel
  362. 3720 lda #$0d   ;carriage return
  363. 3730 jsr chrout ;send to printer
  364. 3740 jsr clrch  ;reset standard i/o
  365. 3750 pla        ;get file number
  366. 3760 jmp close  ;close the file
  367. 3770 ;
  368. 3780 lfn .byte $0e
  369. 3790 ;
  370. 3800 .end
  371.